home *** CD-ROM | disk | FTP | other *** search
- #ifdef lint
- static char *SCCSid = "%W% (NCSA) %G%";
- #endif
-
- /*
-
- rgmac.c by Gaige B. Paulsen
- spawned from rgp.c by Aaron Contorer for NCSA
- Copyright 1987, board of trustees, University of Illinois
-
- Routines for Macintosh Window output.
-
- */
-
-
- /*
- * Include files
- */
-
- #include <stdio.h>
-
- #include <Controls.h>
- #include <Events.h>
- #include <OSutils.h>
- #include <Packages.h>
- #include <Quickdraw.h>
- #include <Windows.h>
-
- #ifdef MPW
- #include "mpw.h"
- #endif MPW
-
- #define TRUE 1
- #define FALSE 0
- #define MAXWIND 20
- #define WINXMAX 4095
- #define WINYMAX 3139
- #define INXMAX 4096
- #define INYMAX 4096
-
- #define SPLASH_SQUARED 4
-
- char *malloc();
-
- /*
- * display structure....
- */
-
- struct RGMwindows {
- GrafPtr
- wind;
- int
- xorigin,
- yorigin,
- xscale,
- yscale,
- vg,
- vs,
- inuse,
- ingin;
- unsigned char
- *name;
- int
- width,
- height;
- ControlHandle
- zoom,
- vert,
- horiz;
- } RGMwind[ MAXWIND ];
-
- long RGMlastclick;
-
- int RGMcolor[]=
- { 30, /* black */
- 33, /* white */
- 205, /* red */
- 341, /* green */
- 409, /* blue */
- 273, /* cyan */
- 137, /* magenta */
- 69 /* yellow */
- };
-
-
- char *macname = "Macintosh Windows";
-
-
- RGGIN(w)
- {
- if (RGsetwind(w)) return(-1);
-
- setgraphcurs();
- RGMwind[w].ingin=1;
- }
-
- RGMoutfunc(f)
- int (*f)();
- {}
-
-
- RGMpencolor(w, color)
- {
- if (RGsetwind(w) ) return(-1);
-
- ForeColor((long) RGMcolor[color] );
- }
-
- RGMclrscr(w)
- {
- if (RGsetwind(w) ) return(-1);
-
- ForeColor((long) RGMcolor[0] );
- EraseRect( &RGMwind[w].wind->portRect);
- }
-
- RGMclose(w)
- {
- if (RGsetwind(w) ) return(-1);
-
- DisposeWindow(RGMwind[w].wind);
- RGMwind[w].inuse = FALSE;
-
- }
-
- RGMpoint(w,x,y)
- {
- if (RGsetwind(w) ) return(-1);
-
- MoveTo(x,y);
- LineTo(x,y);
- }
-
- RGMdrawline(w,x0,y0,x1,y1)
- int w,x0,y0,x1,y1;
- {
- if (RGsetwind(w) ) return(-1);
-
- x0 = (int) ((long) x0 * RGMwind[w].width / INXMAX);
- y0 = RGMwind[w].height - (int) ((long) y0 * RGMwind[w].height / INYMAX);
- x1 = (int) ((long) x1 * RGMwind[w].width/INXMAX);
- y1 = RGMwind[w].height - (int) ((long) y1 * RGMwind[w].height / INYMAX);
-
- MoveTo(x0,y0);
- LineTo(x1,y1);
- }
-
- RGMpagedone(w)
- {
- }
-
- RGMdataline(w,data,count)
- {}
-
-
- RGMcharmode(w,rotation,size)
- {}
-
- RGMshowcur()
- {}
-
- RGMlockcur()
- {}
-
- RGMhidecur()
- {}
-
- RGMbell(w)
- {}
-
- RGMuncover(w)
- {}
-
- char *RGMdevname() {
- return(macname);
- }
-
- RGMinit()
- {
- int i;
- for(i=0; i<20; i++) RGMwind[i].inuse=0;
- }
-
- RGMinfo(w,v,a,b,c,d)
- int w,a,b,c,d,v;
- {
-
- RGMwind[w].vg=v;
- }
-
- RGMgmode()
- {}
-
- RGMtmode()
- {}
-
- RGMnewwin()
- {
- int i=0;
-
- while ( (i< MAXWIND) && (RGMwind[i].inuse) ) i++;
-
- if (i>= MAXWIND) return(-1);
-
- RGMwind[i].wind = GetNewWindow(256,(Ptr) 0L,(Ptr) -1L);
-
- if (RGMwind[i].wind==0L) {
- return(-1);
- }
-
- RGMwind[i].xorigin= 0;
- RGMwind[i].yorigin= 0;
- RGMwind[i].xscale = WINXMAX;
- RGMwind[i].yscale = WINYMAX;
- RGMwind[i].width = 400;
- RGMwind[i].height = 300;
- RGMwind[i].inuse = TRUE;
- RGMwind[i].ingin = 0;
-
- ValidRect( &RGMwind[i].wind->portRect);
-
- return(i);
- }
-
-
- RGattach(vg,virt,name)
- int vg,virt;
- char *name;
- {
- int i,dnum;
- long time;
- char ts[50];
-
- if ( (dnum=RGfindbyVG( vg) ) <0) return(-1);
-
- RGMwind[dnum].vs=virt;
- RGMwind[dnum].name=(char *)malloc(256);
-
- if (RGMwind[dnum].name==0L) return(-2);
-
- RGMwind[dnum].name[0]=165;
- strncpy( &RGMwind[dnum].name[1], name,255);
-
- GetDateTime(&time);
- IUTimeString(time,FALSE, ts); /* Put time in the temp string */
-
- strncat( RGMwind[dnum].name, " ",255); /* Space, please */
- strncat( RGMwind[dnum].name, ts,255); /* Place the time string at the end */
-
- SetWTitle(RGMwind[dnum].wind,RGMwind[dnum].name);
- return(0);
- }
-
- RGdetach(dnum)
- int dnum;
- {
- int i;
- if (dnum<0 || dnum>=MAXWIND) return(-1);
-
- strncpy( RGMwind[dnum].name, &RGMwind[dnum].name[1], 255);
-
- SetWTitle(RGMwind[dnum].wind,RGMwind[dnum].name);
-
- RGMwind[dnum].vs=-1;
- }
-
- RGsetwind(dnum)
- int dnum;
- {
-
- if (dnum<0 || dnum>=MAXWIND) return(-1);
-
- if (!RGMwind[dnum].inuse) return(-1);
-
- SetPort( RGMwind[dnum].wind);
- return(0);
- }
-
- RGupdate(wind)
- GrafPtr wind;
- {
- int i=0,done;
-
- if ( (i=RGfindbywind(wind)) <0)
- return(-1);
-
- SetPort(wind);
- BeginUpdate(wind);
-
- VGstopred( RGMwind[i].vg);
- VGpage( RGMwind[i].vg);
- done = VGpred( RGMwind[i].vg, RGMwind[i].vg);
- EndUpdate(wind);
- if (!done)
- netputevent(1,128,RGMwind[i].vg);
- return(done);
- }
-
- RGsupdate(i)
- {
- int rg;
- rg=RGfindbyVG( i);
-
- if (rg<0) return(0);
- SetPort( RGMwind[rg].wind);
- if (!VGpred( RGMwind[rg].vg, RGMwind[rg].vg) ) {
- netputevent( 1, 128, i);
- }
- else return(1);
- return(0);
- }
-
- RGgetVG(wind)
- GrafPtr wind;
- {
- int i;
-
- i=RGfindbywind(wind);
-
- return( RGMwind[i].vg);
- }
-
- RGgetdnum(wind)
- GrafPtr wind;
- {
- return(RGfindbywind(wind) );
- }
-
- RGfindbyVG( vg)
- int vg;
- {
- int i=0;
-
- while ((i<MAXWIND) && ((!RGMwind[i].inuse) || (RGMwind[i].vg!=vg)))
- i++;
- if (i>=MAXWIND) return(-1);
- return(i);
- }
-
- RGgetVS( dnum)
- int dnum;
- {
- return( RGMwind[dnum].vs);
- }
-
-
- RGfindbywind(wind)
- GrafPtr wind;
- {
- int i=0;
-
- while ((i<MAXWIND) && ((!RGMwind[i].inuse) || (RGMwind[i].wind!=wind)))
- i++;
- if (i>=MAXWIND) return(-1);
- return(i);
- }
-
- inSplash( p1, p2)
- Point *p1,*p2;
- {
- if (p1->h-p2->h>3 || p2->h-p1->h >3)
- return(0);
- if (p1->v-p2->v>3 || p2->v-p1->v >3)
- return(0);
-
- return(1);
- }
-
- RGmousedown( wind, wherein, pnum)
- GrafPtr wind;
- Point *wherein;
- {
- long lx,ly;
- char thispaceforent[6];
- int i;
- Point where;
-
- where = *wherein;
- if ( (i=RGfindbywind(wind)) <0)
- return(-1);
-
- if (!RGMwind[i].ingin) {
- Point anchor, current,last;
- #ifndef MPW
- long TickCount();
- #endif MPW
- long GetDblTime(),tc;
- int x0,y0,x1,y1;
- Rect rect;
- char dum[50];
-
- SetPort(wind);
-
- last = where;
- current = where;
- anchor = where;
-
- PenPat(qd.gray);
- PenMode( patXor);
-
- SetRect( &rect, 0,0,0,0);
-
- while (StillDown()) {
- GetMouse( ¤t);
- if ( inSplash( ¤t, &anchor) ) continue;
- tc=TickCount();
- while(TickCount()==tc);
- VidSync();
- FrameRect(&rect);
-
- if (anchor.v < current.v) {
- rect.top=anchor.v;
- rect.bottom=current.v;
- }
- else {
- rect.top=current.v;
- rect.bottom=anchor.v;
- }
-
- if (anchor.h < current.h) {
- rect.left=anchor.h;
- rect.right=current.h;
- }
- else {
- rect.right=anchor.h;
- rect.left =current.h;
- }
-
- FrameRect(&rect);
- last=current;
- }
-
- FrameRect(&rect);
-
- PenPat(qd.black);
- PenMode( patCopy);
-
- if ( !inSplash( &anchor, ¤t)) {
- x0 = (int) ((long) rect.left * RGMwind[i].xscale / RGMwind[i].width );
- y0 = (int) RGMwind[i].yscale -
- ((long) rect.top * RGMwind[i].yscale / RGMwind[i].height);
- x1 = (int) ((long) rect.right * RGMwind[i].xscale / RGMwind[i].width);
- y1 = (int) RGMwind[i].yscale -
- ((long) rect.bottom * RGMwind[i].yscale / RGMwind[i].height);
-
- VGzoom( i,
- x0 +RGMwind[i].xorigin,
- y1 +RGMwind[i].yorigin,
- x1 +RGMwind[i].xorigin,
- y0 +RGMwind[i].yorigin);
-
- VGpage( RGMwind[i].vg);
-
- RGMwind[i].xscale= x1-x0;
- RGMwind[i].yscale= y0-y1;
- RGMwind[i].xorigin= x0+ RGMwind[i].xorigin;
- RGMwind[i].yorigin= y1+ RGMwind[i].yorigin;
-
- sprintf(dum,"VGzoom [%d,%d] -[%d,%d]", x0,y1,x1,y0);
- putln(dum);
- while( !VGpred( RGMwind[i].vg, RGMwind[i].vg) )
- Stask();
- RGMlastclick=0L;
- }
- else {
- if (RGMlastclick && ((RGMlastclick +GetDblTime() ) > TickCount()) ) {
- RGMwind[i].xscale = WINXMAX;
- RGMwind[i].yscale = WINYMAX;
- RGMwind[i].xorigin= 0;
- RGMwind[i].yorigin= 0;
-
- VGzoom(i,0,0,WINXMAX,WINYMAX);
- VGpage( RGMwind[i].vg);
- while( !VGpred( RGMwind[i].vg, RGMwind[i].vg) )
- Stask();
- RGMlastclick=0L;
- }
- else RGMlastclick=TickCount();
- }
- return(0);
-
- }
-
-
- lx= (RGMwind[i].xscale * where.h) / ((long)RGMwind[i].width);
- ly= RGMwind[i].yscale - ((RGMwind[i].yscale * where.v) / ((long)RGMwind[i].height));
-
- VGgindata( RGMwind[i].vg, (int) lx, (int) ly, ' ', thispaceforent);
-
- RSsendstring( RGMwind[i].vs, thispaceforent, 5);
-
- RGMwind[i].ingin=0;
- unsetgraphcurs();
- RGMlastclick=TickCount();
- }
-
- long *Ticks= (long *)0x16a;
-
- VidSync()
- {
- long a;
-
- a= *Ticks;
- while (a ==*Ticks);
- }
-